package com.zenithmind.exam.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.exam.pojo.entity.ExamCategory;

import java.util.List;

/**
 * 考试分类服务接口
 * 
 * @author ZenithMind
 * @since 2024-07-01
 */
public interface ExamCategoryService extends IService<ExamCategory> {

    /**
     * 创建分类
     * 
     * @param category 分类信息
     * @return 创建结果
     */
    boolean createCategory(ExamCategory category);

    /**
     * 更新分类
     * 
     * @param category 分类信息
     * @return 更新结果
     */
    boolean updateCategory(ExamCategory category);

    /**
     * 删除分类
     * 
     * @param categoryId 分类ID
     * @return 删除结果
     */
    boolean deleteCategory(String categoryId);

    /**
     * 根据ID获取分类
     * 
     * @param categoryId 分类ID
     * @return 分类信息
     */
    ExamCategory getCategoryById(String categoryId);

    /**
     * 根据父分类ID获取子分类列表
     * 
     * @param parentId 父分类ID
     * @return 子分类列表
     */
    List<ExamCategory> getChildCategories(String parentId);

    /**
     * 获取根分类列表
     * 
     * @return 根分类列表
     */
    List<ExamCategory> getRootCategories();

    /**
     * 获取分类树
     * 
     * @return 分类树
     */
    List<ExamCategory> getCategoryTree();

    /**
     * 分页查询分类列表
     * 
     * @param page 分页参数
     * @param name 分类名称
     * @param status 状态
     * @param parentId 父分类ID
     * @return 分页结果
     */
    IPage<ExamCategory> getCategoryPage(Page<ExamCategory> page, String name, Integer status, String parentId);

    /**
     * 启用/禁用分类
     * 
     * @param categoryId 分类ID
     * @param status 状态
     * @return 操作结果
     */
    boolean updateCategoryStatus(String categoryId, Integer status);

    /**
     * 检查分类是否可以删除
     * 
     * @param categoryId 分类ID
     * @return 是否可以删除
     */
    boolean canDeleteCategory(String categoryId);

    /**
     * 获取启用状态的分类列表
     * 
     * @return 启用状态的分类列表
     */
    List<ExamCategory> getEnabledCategories();
}
